package com.test28_类库应用;

import org.junit.Test;

/**
 * 实现内容处理的操作接口
 */
interface IContent {
    /** 返回原始字符串的数据 */
    public String content();

    /** 返回逆序的内容结果 */
    public String reverse();

    /** 执行删除出操作，设置的是结束索引 */
    public String delete(int index);
}

/**
 * 定义字符串操作数据的子类
 */
class StringContent implements IContent {
    private StringBuffer buffer = new StringBuffer(26);

    public StringContent() {
        // 实现数据的初始化
        for (char c = 'a'; c <= 'z'; c++) {
            buffer.append(c);
        }
    }

    @Override
    public String content() {
        // 返回原始数据
        return this.buffer.toString();
    }

    @Override
    public String reverse() {
        // 返回逆序结果
        return this.buffer.reverse().toString();
    }

    @Override
    public String delete(int index) {
        // 删除部分内容后返回
        return this.buffer.delete(0, index).toString();
    }
}

class ContentFactory {
    private ContentFactory() {
    }

    public static IContent getInstance() {
        return new StringContent();
    }
}

/**
 * 字符串操作
 */
public class YootkDemo_01 {

    /**
     * 传统的面向过程做法
     */
    @Test
    public void test1() {
        StringBuffer buffer = new StringBuffer();
        for (char c = 'a'; c <= 'z'; c++) {
            buffer.append(c);
        }
        System.out.println("【初始化数据】" + buffer);
        System.out.println("【逆序输出内容】" + buffer.reverse());
        System.out.println("【删除前五个字符】" + buffer.delete(0, 5));
    }

    /**
     * 通过面向对象的形式
     */
    @Test
    public void test2() {
        IContent content = ContentFactory.getInstance();
        System.out.println("【初始化数据】" + content.content());
        System.out.println("【逆序输出内容】" + content.reverse());
        System.out.println("【删除前五个字符】" + content.delete(5));
    }
}
